package fr.univ.colloque.data;

import java.util.List;

public class Expose implements Comparable<Expose>
{
    //attributs de base
    private int id;
    private String libelle;
    private String resume;
    //attributs objets
    private Colloque colloc;
    private Personne personne; // donc il faut créér la personne (l'auteur)avant
    private List<MotCle> lstMc;
    // Permet de savoir où en est l'evaluation de l'exposé
    // 0 => En cours ...
    // 1 => Accepté
    // 2 => Refusé
    private Etat etat;
    // D'après les règles de gestion, chaque exposé doit avoir 2 évaluateurs
    private Membre evaluateur1;
    private Membre evaluateur2;

    public Expose()
    {
    }

    // constructeur
    public Expose(int pId, String pLibelle, String pResume, Colloque pColloc, Personne pPersonne, List<MotCle> pLstMc, Etat pEtat)
    {
        this.id = pId;
        this.libelle = pLibelle;
        this.resume = pResume;
        this.colloc = pColloc;
        this.lstMc = pLstMc;
        this.personne = pPersonne;
        this.etat = pEtat;
    }

    public Colloque getColloc()
    {
        return colloc;
    }

    public void setColloc(Colloque colloc)
    {
        this.colloc = colloc;
    }

    public int getId()
    {
        return id;
    }

    public void setId(int id)
    {
        this.id = id;
    }

    public String getLibelle()
    {
        return libelle;
    }

    public void setLibelle(String libelle)
    {
        this.libelle = libelle;
    }

    public List<MotCle> getLstMc()
    {
        return lstMc;
    }

    public void setLstMc(List<MotCle> lstMc)
    {
        this.lstMc = lstMc;
    }

    public Personne getPersonne()
    {
        return personne;
    }

    public void setPersonne(Personne personne)
    {
        this.personne = personne;
    }

    public String getResume()
    {
        return resume;
    }

    public void setResume(String resume)
    {
        this.resume = resume;
    }

    public Personne getEvaluateur1()
    {
        return evaluateur1;
    }

    public void setEvaluateur1(Membre evaluateur1)
    {
        this.evaluateur1 = evaluateur1;
    }

    public Personne getEvaluateur2()
    {
        return evaluateur2;
    }

    public void setEvaluateur2(Membre evaluateur2)
    {
        this.evaluateur2 = evaluateur2;
    }

    public Etat getEtat()
    {
        return etat;
    }

    public void setEtat(Etat etat)
    {
        this.etat = etat;
    }

    /**
     * 
     * @return la moyenne des notes des deux évaluateurs
     */
    public float getMoyenne()
    {
        float moy = 0;

        Notation eval1 = evaluateur1.getExpoAffecter().get(this);
        Notation eval2 = evaluateur2.getExpoAffecter().get(this);

        moy = (eval1.getNoteFinale() + eval2.getNoteFinale()) / 2;

        return moy;
    }

    @Override
    public int hashCode()
    {
        int hash = 7;
        hash = 89 * hash + this.id;
        return hash;
    }

    @Override
    public boolean equals(Object obj)
    {
        if (obj == null)
        {
            return false;
        }
        if (getClass() != obj.getClass())
        {
            return false;
        }
        final Expose other = (Expose) obj;
        if (this.id != other.id)
        {
            return false;
        }
        return true;
    }

    @Override
    public int compareTo(Expose exp)
    {
        if (this.getMoyenne() > exp.getMoyenne())
        {
            return -1;
        }
        else if (this.getMoyenne() < exp.getMoyenne())
        {
            return 1;
        }
        else
        {
            return 0;
        }

    }
}
